package org.example.review.feign;

import feign.Param;
import feign.QueryMap;
import feign.RequestLine;

import java.util.Map;

/**
 * Apply服务的Feign客户端接口（纯OpenFeign）
 * 使用原生Feign注解，不依赖Spring Cloud
 */
public interface ApplyServiceClient {

    /**
     * 示例：根据ID获取申请信息
     * @param applyId 申请ID
     * @return 申请信息
     */
    @RequestLine("GET /api/apply/{applyId}")
    Map<String, Object> getApplyById(@Param("applyId") Long applyId);

    /**
     * 示例：创建新申请
     * @param applyData 申请数据
     * @return 创建结果
     */
    @RequestLine("POST /api/apply")
    Map<String, Object> createApply(Map<String, Object> applyData);

    /**
     * 示例：更新申请状态
     * @param applyId 申请ID
     * @param status 新状态
     * @return 更新结果
     */
    @RequestLine("PUT /api/apply/{applyId}/status?status={status}")
    Map<String, Object> updateApplyStatus(
            @Param("applyId") Long applyId,
            @Param("status") String status
    );

    /**
     * 示例：删除申请
     * @param applyId 申请ID
     * @return 删除结果
     */
    @RequestLine("DELETE /api/apply/{applyId}")
    Map<String, Object> deleteApply(@Param("applyId") Long applyId);

    /**
     * 示例：查询申请列表（使用QueryMap）
     * @param queryParams 查询参数（包含userId和可选的status）
     * @return 申请列表
     */
    @RequestLine("GET /api/apply/list")
    Map<String, Object> getApplyList(@QueryMap Map<String, Object> queryParams);

    /**
     * 示例：查询申请列表（使用单独参数）
     * @param userId 用户ID
     * @param status 状态
     * @return 申请列表
     */
    @RequestLine("GET /api/apply/list?userId={userId}&status={status}")
    Map<String, Object> getApplyListByParams(
            @Param("userId") Long userId,
            @Param("status") String status
    );
}
